<?php
require_once 'AdminController.php';
/**
 * 
 * Classe referente aos cadastros do site
 * @author Ramon Moraes
 *
 */
class Cadastros extends AdminController{
	
	/**
	 * 
	 * Construtor da classe
	 * @access public
	 * @method __construct
	 */
	public function __construct(){
		
		parent::__construct();
	}
	
	/**
	 * Função padrão, carrega a view da controller genérica
	 * @see AdminController::index()
	 */
	public function index(){
		
		parent::index(strtolower($this->router->fetch_class()));
	}
	
	/**
	 * 
	 * Função para carregar página de listar os cadastros
	 * @access public
	 * @method listar
	 */
	public function listar($pag = 1, $limit = 10){
		
		if(!$this->isLogged()){
			redirect('admin/administradores/login');
		}
		
		$indices = array(
			'Id',
			'Nome',
			'Email',
			'Telefone'
		);
		
		$cad = new Cadastro();
		$cad->where('flag', 'ATIVO')->order_by('id', 'desc')->get($limit, ($pag - 1) * $limit);
		
		$dados = array();
		foreach($cad->all as $c){
			$dados[] = $c->getArrayDadosAdmin();
		}
		
		$c2 = new Cadastro();
		$total = $c2->where('flag', 'ATIVO')->count();
		$numPaginas = ceil($total / $limit);
		if($numPaginas == 0){
			$numPaginas = 1;
		}
		
		$paginacao = array(
			'paginaAtual'		=> $pag,
			'itensPorPagina'	=> $limit,
			'totalPaginas'		=> $numPaginas,
			'link'				=> 'admin/' . $this->router->fetch_class() . '/' . $this->router->fetch_method() . '/'
		);
		
		$this->setData('colunas', $indices);
		$this->setData('linhas', $dados);
		$this->setData('paginacao', $paginacao);
		
		$this->loadView('admin/cadastros/index');
	}
	
	/**
	 * 
	 * Função para exluir um cadastro
	 * @param int $id
	 * @access public
	 * @method excluir
	 */
	public function excluir($id){
		$cad = new Cadastro();
		$cad->where('id', $id)->get();
		$cad->flag = 'INATIVO';
		$cad->save();
		redirect('admin/cadastros/listar');
	}
	
	/**
	 * 
	 * Função para salvar um cadastro
	 * @param int $id
	 * @access public
	 * @method salvar
	 */
	public function salvar($id=null){
		
		if(isset($_POST['nome']) && $_POST['nome'] != '' && isset($_POST['sobrenome']) && $_POST['sobrenome'] != ''){
			$cad = new Cadastro();
			
			if($id != null){
				$cad->where('id', $id)->get();
			}

			$cad->nome = $_POST['nome'];
			$cad->sobrenome = $_POST['sobrenome'];
			
			$cad->save();
			redirect('admin/cadastros/cadastroSucesso');
		}
		redirect('admin/cadastros/cadastroErro');
	}
	
	/**
	 * 
	 * Função para o caso de sucesso na inserção ou alteração de um registro
	 * @access public 
	 * @method cadastroSucesso
	 */
	public function cadastroSucesso(){
		
		$this->setData('cadastroSucesso', true);
		$this->listar();
	}
	
	/**
	 * 
	 * Função para o caso de erro na inserção ou alteração de um registro
	 * @param String $erro
	 * @access public
	 * @method cadastroErro
	 */
	public function cadastroErro($erro = null){
		
		$this->setData('cadastroSucesso', false);
		$this->listar();
	}
	
	/**
	 * 
	 * Função para retornar um csv com os cadastros realizados no site que ainda estão como ativos
	 */
	public function extracao($armazenar = false){
		
		$this->load->dbutil();
		
		$q = $this->db->where('flag', 'ATIVO')->order_by('id', 'asc')->get('cadastros');
		
		if($armazenar){
			$cadastros = new Cadastro();
			$cadastros->where('flag', 'ATIVO')->get();
			foreach($cadastros->all as $cadastro){
				$cadastro->flag = 'INATIVO';
				$cadastro->save();
			}
		}
		
		header("Content-type: application/csv");
		header("Content-Disposition: attachment; filename=cadastros-" . date('Y-m-d') . ".csv");
		echo $this->dbutil->csv_from_result($q);
	}
	
	/**
	 * 
	 * Função para armazenar os cadastros que já foram exportados
	 */
	public function armazenar(){
		
		$cadastro = new Cadastro();
		if(isset($_POST['cadastro']) && is_array($_POST['cadastro'])){
			foreach($_POST['cadastro'] as $id => $isOn){
				$cadastro->where('id', $id)->get();
				$cadastro->flag = 'INATIVO';
				$cadastro->save();
			}
		}
		
		redirect('admin/cadastros/listar');
	}
	
	/**
	 * 
	 * Função que carrega os cadastros que estão armazenados como inativo
	 */
	public function cadastrosArmazenados($pag = 1, $limit = 10){
		
		if(!$this->isLogged()){
			redirect('admin/administradores/login');
		}
		
		$indices = array(
			'Id',
			'Nome',
			'Email',
			'Telefone'
		);
		
		$cad = new Cadastro();
		$cad->where('flag', 'INATIVO')->order_by('id', 'desc')->get();
		
		$dados = array();
		foreach($cad->all as $c){
			$dados[] = $c->getArrayDadosAdmin();
		}
		
		$c2 = new Cadastro();
		$total = $c2->where('flag', 'INATIVO')->count();
		$numPaginas = ceil($total / $limit);
		if($numPaginas == 0){
			$numPaginas = 1;
		}
		
		$paginacao = array(
			'paginaAtual'		=> $pag,
			'itensPorPagina'	=> $limit,
			'totalPaginas'		=> $numPaginas,
			'link'				=> 'admin/' . $this->router->fetch_class() . '/' . $this->router->fetch_method() . '/'
		);
		
		$this->setData('colunas', $indices);
		$this->setData('linhas', $dados);
		$this->setData('paginacao', $paginacao);
		
		$this->loadView('admin/cadastros/armazenados');
	}
	
	/**
	 * 
	 * Função para ativar um cadastro armazenado
	 * @param int $id
	 */
	public function desarmazenar($id = null){
		
		if($id == null){
			redirect('admin/cadastros/cadastrosArmazenados');
		}
		
		$cadastro = new Cadastro();
		$cadastro->where('id', $id)->get();
		
		$cadastro->flag = 'ATIVO';
		$cadastro->save();
		
		$this->setData('cadastroSucesso', true);
		$this->cadastrosArmazenados();
		//redirect('admin/cadastros/cadastrosArmazenados');
	}
}